import java.util.Scanner;

/**
 * 小蓝有一个长度为 N 的数组 A = [A0, A1, ..., A(N-1)]。
 * 现在小蓝想要从 A 对应的数组下标所构成的集合 I = {0, 1, 2, ..., N-1} 中找出一个子集 R1。
 * <p>
 * 那么 R1 在 I 中的补集为 R2。
 * 记 S1 = ∑(r ∈ R1) A[r]，
 * S2 = ∑(r ∈ R2) A[r]。
 * <p>
 * 我们要求 S1 和 S2 均为偶数，请问在这种情况下共有多少种不同的 R1。
 * <p>
 * 当 R1 或 R2 为空集时，我们将 S1 或 S2 视为 0。
 * <p>
 * 例如：
 * A = [6, 6]
 * 第一种情况：R1 = {0}，R2 = {1}，S1 = 6，S2 = 6
 * 第二种情况：R1 = {1}，R2 = {0}，S1 = 6，S2 = 6
 * 第三种情况：R1 = {0, 1}，R2 = {}，S1 = 12，S2 = 0
 * 第四种情况：R1 = {}，R2 = {0, 1}，S1 = 0，S2 = 12
 */
public class 数组分割 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 输入测试用例数
        int test = scan.nextInt();
        // 使用 long 类型以防溢出
        long[] ans = new long[test];
        for (int i = 0; i < test; i++) {
            // 输入测试用例数组的长度
            int n = scan.nextInt();
            // 定义奇数、偶数
            int evenNums, oddNums;
            evenNums = 0;
            oddNums = 0;
            // 计算每个元素的奇偶性
            for (int j = 0; j < n; j++) {
                int element = scan.nextInt();
                // 如果是偶数
                if (element % 2 == 0) {
                    evenNums++;
                }
                // 如果是奇数
                else if (element % 2 == 1) {
                    oddNums++;
                }
            }
            // 如果奇数个数是偶数个，则答案为 2^evenNums * 2^(oddNums - 1) % 1000000007（模 1000000007 是因为测试用例计算值过大）
            // 2^evenNums 表示 evenNums 个偶数在 R1 或者 R2 这两个位置上任意选一个位置
            // 当奇数个数为偶数个时，则需要任意两个奇数在 R1 或者 R2 这两个位置上任意选一个位置
            if (oddNums % 2 == 0) {
                int mod = 1000000007;
                // 给 ans[i] 赋值
                ans[i] = 1;
                // 手动进行幂函数计算（ Math.pow(底数,幂) 返回的是 double 类型
                // ans[i] = (int)(Math.pow(2, evenNums) * Math.pow(2, oddNums == 0 ? 0 : oddNums - 1) % mod);
                for (int k = 0; k < evenNums; k++) {
                    ans[i] *= 2;
                    ans[i] %= mod;
                }
                for (int k = 0; k < oddNums - 1; k++) {
                    ans[i] *= 2;
                    ans[i] %= mod;
                }
            }
            // 如果奇数个数是奇数个，则必存在 S1 或 S2 为 奇数的情况
            else if (oddNums % 2 == 1) {
                ans[i] = 0;
            }
        }
        // 输出结果
        for (long res : ans) {
            System.out.println(res);
        }
    }
}

/**
 * 输入格式：
 * 第一行一个整数 T，表示有 T 组数据。
 * <p>
 * 接下来输入 T 组数据，每组数据包含两行：
 * 第一行一个整数 N，表示数组 A 的长度；
 * 第二行输入 N 个整数从左至右依次为 A0, A1, ..., A(N-1)，相邻元素之间用空格分隔。
 * 输出格式：
 * 对于每组数据，输出一行，包含一个整数表示答案，答案可能会很大，你需要将答案对 1000000007 进行取模后输出。
 * 输入：
 * 2
 * 2
 * 6 6
 * 2
 * 1 6
 * 输出：
 * 4
 * 0
 */
